home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
fortran
/
libry51.zip
/
LIBRY4C.DOC
< prev
next >
Wrap
Text File
|
1989-11-10
|
17KB
|
586 lines
.de
.pa
EXAMPLE ILLUSTRATING THE USE OF BFNLQ, BRYDN, CONJG, AND NTNLQ
$STORAGE:2
PROGRAM EXAMPLE1
C
C compare methods for solving nonlinear simultaneous equations
C
IMPLICIT INTEGER*2(I-N),REAL*4(A-H,O-Z)
LOGICAL*2 LXXX87
CHARACTER SFILE*12
C
C list heading
C
CALL WRTTY('TESTNLEQ/V1.0: comparison of various nonlinear_')
CALL WRTTY(' simultaneous equation solvers<')
CALL WRTTY('by Dudley J. Benton, TVA Lab, P.O. Drawer E,_')
CALL WRTTY(' Norris, TN (615) 632-1887<')
C
C fetch optional spool file name from runtime string (default to CRT)
C
CALL RRPAR(1,SFILE)
IF(SFILE.EQ.' ') SFILE='CON'
C
C spool printer output (don't bother if it is already going there,
C although this won't hurt anything if you do it anyway)
C
IF(SFILE.NE.'PRN ') THEN
CALL SPOOL(SFILE,IER)
IF(IER.NE.0) GO TO 999
ENDIF
C
IF(SFILE.NE.'CON ') THEN
CALL FFPRN
CALL WRPRN('TESTNLEQ/V1.0: comparison of various nonlinear_')
CALL WRPRN(' simultaneous equation solvers<')
CALL WRPRN('by Dudley J. Benton, TVA Lab, P.O. Drawer E,_')
CALL WRPRN(' Norris, TN (615) 632-1887<')
ENDIF
C
C test for math coprocessor
C
IF(.NOT.LXXX87(0)) THEN
CALL WRTTY('What, no coprocessor? You gotta be kidding!<')
CALL WRTTY('Find a good book to read while you wait!<')
ENDIF
C
C notify user of optional break
C
CALL WRTTY('<')
CALL WRTTY('You can tap the space bar to interrupt processing.<')
C
C test single precision routines
C
CALL SINGL
C
C test double precision routines
C
CALL DOUBL
C
C return printer output to PRN
C
CALL WRTTY('<')
IF(SFILE.NE.'PRN') CALL SPOOL('PRN ',IER)
C
CALL WRTTY('Thanks for using TESTNLEQ have a nice day <')
CALL WRTTY('<')
C
C HZ beats
CALL TONE( 784, 1)
CALL TONE( 988, 1)
CALL TONE(1047, 1)
CALL TONE( 524, 2)
C
999 STOP
END
SUBROUTINE SINGL
C
C test methods for solving nonlinear simultaneous equations
C (single precision)
C
IMPLICIT INTEGER*2(I-N),REAL*4(A-H,O-Z)
C
C set parameters up for the maximum
C
PARAMETER (N=4,M=9,MW=6*N+5*M+N*N+M*N)
DIMENSION XMIN(N),XMAX(N),X(N),F(M),WORK(MW)
EXTERNAL USER1,USER2,USER3,USER4,USER5,USER6
DATA XMIN/N*.001E0/
DATA XMAX/N*.999E0/
DATA MCALL,IPRT/9999,1/
C
CALL WRPRN('<')
CALL WRPRN('TESTING SINGLE PRECISION ROUTINES<')
C
CALL WRPRN('Brute Force Method<')
CALL BFNLQ(USER1,XMIN,XMAX,X,F,2,2,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQ(USER2,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQ(USER3,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQ(USER4,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQ(USER5,XMIN,XMAX,X,F,4,4,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQ(USER6,XMIN,XMAX,X,F,4,9,WORK,MW,MCALL,IPRT,IER)
C
CALL WRPRN('Newton''s Method<')
CALL NTNLQ(USER1,XMIN,XMAX,X,F,2,2,WORK,MW,MCALL,IPRT,IER)
CALL NTNLQ(USER2,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL NTNLQ(USER3,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL NTNLQ(USER4,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL NTNLQ(USER5,XMIN,XMAX,X,F,4,4,WORK,MW,MCALL,IPRT,IER)
CALL NTNLQ(USER6,XMIN,XMAX,X,F,4,9,WORK,MW,MCALL,IPRT,IER)
C
CALL WRPRN('Conjugate Gradient Method<')
CALL CONJG(USER1,XMIN,XMAX,X,F,2,2,WORK,MW,MCALL,IPRT,IER)
CALL CONJG(USER2,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL CONJG(USER3,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL CONJG(USER4,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL CONJG(USER5,XMIN,XMAX,X,F,4,4,WORK,MW,MCALL,IPRT,IER)
CALL CONJG(USER6,XMIN,XMAX,X,F,4,9,WORK,MW,MCALL,IPRT,IER)
C
CALL WRPRN('Modified Broyden''s Method<')
CALL BRYDN(USER1,XMIN,XMAX,X,F,2,2,WORK,MW,MCALL,IPRT,IER)
CALL BRYDN(USER2,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BRYDN(USER3,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BRYDN(USER4,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BRYDN(USER5,XMIN,XMAX,X,F,4,4,WORK,MW,MCALL,IPRT,IER)
CALL BRYDN(USER6,XMIN,XMAX,X,F,4,9,WORK,MW,MCALL,IPRT,IER)
C
RETURN
END
SUBROUTINE USER1(X,F)
C
C user-defined functional which is to be minimized by selecting X
C the exact solution to this is [X]=[.1,.2]
C
IMPLICIT INTEGER*2(I-N),REAL*4(A-H,O-Z)
DIMENSION X(2),F(2)
C
X1=X(1)*5.000000E0
X2=X(2)*4.330127E0
C
F(1)=3E0*X1**2-X2**2
F(2)=3E0*X1*X2**2-X1**3-1E0
C
RETURN
END
SUBROUTINE USER2(X,F)
C
C user-defined functional which is to be minimized by selecting X
C the exact solution to this is [X]=[.1,.2,.3]
C
IMPLICIT INTEGER*2(I-N),REAL*4(A-H,O-Z)
DIMENSION X(3),F(3)
PARAMETER (PI=3.1415926E0)
C
X1=X(1)*5E0
X2=X(2)-.2E0
X3=-PI*X(3)/1.8E0
C
F(1)=3E0*X1-COS(X2*X3)-.5E0
F(2)=X1**2-81E0*(X2+.1E0)**2+SIN(X3)+1.06E0
F(3)=EXP(-X1*X2)+20E0*X3+(10E0*PI-3E0)/3E0
C
RETURN
END
SUBROUTINE USER3(X,F)
C
C user-defined functional which is to be minimized by selecting X
C the exact solution to this is [X]=[.1,.2,.3]
C
IMPLICIT INTEGER*2(I-N),REAL*4(A-H,O-Z)
DIMENSION X(3),F(3)
C
X1=X(1)-.1E0
X2=X(2)/2E0
X3=X(3)/.3E0
C
F(1)=X1+COS(X1*X2*X3)-1E0
F(2)=ABS(1E0-X1)**.25+X2+.05E0*X3**2-.15E0*X3-1E0
F(3)=-X1**2-.1E0*X2**2+.01E0*X2+X3-1E0
C
RETURN
END
SUBROUTINE USER4(X,F)
C
C user-defined functional which is to be minimized by selecting X
C the exact solution to this is [X]=[.1,.2,.3]
C
IMPLICIT INTEGER*2(I-N),REAL*4(A-H,O-Z)
DIMENSION X(3),F(3)
C
X1=X(1)*8.77129E0/.1E0
X2=X(2)*.259695E0/.2E0
X3=X(3)*(-1.37228E0)/.3E0
C
F(1)=X1*EXP(X2*1E0)+X3*1E0-10E0
F(2)=X1*EXP(X2*2E0)+X3*2E0-12E0
F(3)=X1*EXP(X2*3E0)+X3*3E0-15E0
C
RETURN
END
SUBROUTINE USER5(X,F)
C
C user-defined functional which is to be minimized by selecting X
C the exact solution to this is [X]=[.1,.2,.3,.4]
C
IMPLICIT INTEGER*2(I-N),REAL*4(A-H,O-Z)
DIMENSION X(4),F(4)
C
X1=X(1)*1.2E0/.1E0
X2=X(2)*5.6E0/.2E0
X3=X(3)*4.3E0/.3E0
X4=X(4)*1.0E0/.4E0
C
F(1)=X1+2E0*X2+X3+4E0*X4-20.7E0
F(2)=X1**2+2E0*X1*X2+X4**3-15.88E0
F(3)=X1**3+X3**2+X4-21.218E0
F(4)=3E0*X2+X3*X4-21.1E0
C
RETURN
END
SUBROUTINE USER6(X,F)
C
C user-defined functional which is to be minimized by selecting X
C the exact solution to this is [X]=[.1,.2,.3,.4]
C
IMPLICIT INTEGER*2(I-N),REAL*4(A-H,O-Z)
DIMENSION X(4),F(9),T(9),A(9)
DATA T/1.,2.,3.,4.,5.,6.,7.,8.,9./
DATA A/2.14737,1.69412,1.2,.64615,.0,-.8,-1.88571,-3.6,-7.2/
C
CA= 3.*X(1)
T1=25.*X(2)
T0=35.*X(3)
T2=45.*X(4)
C
DO 100 I=1,9
100 F(I)=CA*(T(I)-T1)*(T(I)-T2)/(T0-T(I))-A(I)
C
RETURN
END
SUBROUTINE DOUBL
C
C test methods for solving nonlinear simultaneous equations
C (double precision)
C
IMPLICIT INTEGER*2(I-N),REAL*8(A-H,O-Z)
C
C set parameters up for the maximum
C
PARAMETER (N=4,M=9,MW=6*N+5*M+N*N+M*N)
DIMENSION XMIN(N),XMAX(N),X(N),F(M),WORK(MW)
EXTERNAL USERD1,USERD2,USERD3,USERD4,USERD5,USERD6
DATA XMIN/N*.001D0/
DATA XMAX/N*.999D0/
DATA MCALL,IPRT/9999,1/
C
CALL WRPRN('<')
CALL WRPRN('TESTING DOUBLE PRECISION ROUTINES<')
C
CALL WRPRN('Brute Force Method<')
CALL BFNLQD(USERD1,XMIN,XMAX,X,F,2,2,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQD(USERD2,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQD(USERD3,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQD(USERD4,XMIN,XMAX,X,F,3,3,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQD(USERD5,XMIN,XMAX,X,F,4,4,WORK,MW,MCALL,IPRT,IER)
CALL BFNLQD(USERD6,XMIN,X